#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

void c_text()
{
    printf("系统调用 malloc 调用2次\n");
    // 分配 1MB 的内存
    void *p = malloc(1024 * 1024);
    void *p2 = malloc(1024 * 1024);
    if (p == NULL)
    {
        // 处理内存分配失败的情况
        perror("mi_malloc filed");
        return;
    }

    // 使用分配的内存
    memset(p, 0, 1024 * 1024);
    memset(p2, 0, 1024 * 1024);

    // 释放内存
    free(p);
    free(p2);
}

void cpp_text()
{
    char *p = new char[100];
    if (p == NULL)
    {
        printf("malloc failed: %s\n", strerror(errno));
        return;
    }
    delete[] p;
}

int main(int argc, char *argv[])
{
    int cmd = 0;
    if (argc != 1)
    {
        cmd = atoi(argv[1]);
        if (cmd == 1)
            c_text();
        else if (cmd == 2)
            cpp_text();
        else if (cmd == 3)
        {
            c_text();
            cpp_text();
        }
    }
    else
    {
        c_text();
    }

    return 0;
}

/* 测试:
编译: scons

# 1.替换默认 malloc, new
env LD_PRELOAD=/usr/local/lib/libmimalloc.so ./2_默认使用mimalloc_库.out

# 2.查看内存分配情况
env MIMALLOC_VERBOSE=1 LD_PRELOAD=/usr/local/lib/libmimalloc.so ./2_默认使用mimalloc_库.out

 */